name: MERGE PIPELINE

on:
  pull_request_target:
    branches:
      - main
      - 'branch-[0-9].[0-9]'
    types:
      - closed
permissions:
  pull-requests: write
  issues: write
  actions: write

jobs:
  backport:
    runs-on: ubuntu-latest
    if: >
      github.event.pull_request.merged == true &&
      github.base_ref == 'main' && 
      github.repository == 'StarRocks/starrocks' &&
      !contains(github.event.pull_request.title, 'cherry-pick') &&
      !contains(github.event.pull_request.title, 'backport') && (
      contains(github.event.pull_request.labels.*.name, '3.2') ||
      contains(github.event.pull_request.labels.*.name, '3.1') ||
      contains(github.event.pull_request.labels.*.name, '3.0') ||
      contains(github.event.pull_request.labels.*.name, '2.5') )
    env:
      PR_NUMBER: ${{ github.event.number }}
    steps:
      - name: backport branch-3.2
        if: contains(github.event.pull_request.labels.*.name, '3.2')
        uses: thollander/actions-comment-pull-request@v1
        with:
          message: |
            @Mergifyio backport branch-3.2
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - uses: actions-ecosystem/action-remove-labels@v1
        if: contains(github.event.pull_request.labels.*.name, '3.2')
        with:
          labels: '3.2'

      - name: backport branch-3.1
        if: contains(github.event.pull_request.labels.*.name, '3.1')
        uses: thollander/actions-comment-pull-request@v1
        with:
          message: |
            @Mergifyio backport branch-3.1
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - uses: actions-ecosystem/action-remove-labels@v1
        if: contains(github.event.pull_request.labels.*.name, '3.1')
        with:
          labels: '3.1'

      - name: backport branch-3.0
        if: contains(github.event.pull_request.labels.*.name, '3.0')
        uses: thollander/actions-comment-pull-request@v1
        with:
          message: |
            @Mergifyio backport branch-3.0
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - uses: actions-ecosystem/action-remove-labels@v1
        if: contains(github.event.pull_request.labels.*.name, '3.0')
        with:
          labels: '3.0'

      - name: backport branch-2.5
        if: contains(github.event.pull_request.labels.*.name, '2.5')
        uses: thollander/actions-comment-pull-request@v1
        with:
          message: |
            @Mergifyio backport branch-2.5
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - uses: actions-ecosystem/action-remove-labels@v1
        if: contains(github.event.pull_request.labels.*.name, '2.5')
        with:
          labels: '2.5'

  thirdparty-update-image:
    runs-on: [self-hosted, normal]
    name: Thirdparty Update Image
    if: github.event.pull_request.merged == true
    env:
      PR_NUMBER: ${{ github.event.number }}
      BRANCH: ${{ github.base_ref }}
      REPO: ${{ github.repository }}
    steps:
      - name: clean
        run: |
          rm -rf ${{ github.workspace }}
          mkdir -p ${{ github.workspace }}

      - uses: dorny/paths-filter@v3
        id: changes
        with:
          filters: |
            thirdparty:
            - 'thirdparty/**'
            - 'docker/dockerfiles/dev-env/dev-env.Dockerfile'

      - name: update image
        if: steps.changes.outputs.thirdparty == 'true'
        run: |
          rm -rf ./ci-tool && cp -rf /var/lib/ci-tool ./ci-tool && cd ci-tool && git pull && source lib/init.sh
          ./bin/elastic-update-image.sh $BRANCH $PR_NUMBER

      - name: Clean ENV
        if: always()
        run: |
          rm -rf ${{ github.workspace }}/*

  close_msg:
    runs-on: [self-hosted, normal]
    if: >
      github.event.pull_request.merged == true && 
      github.base_ref == 'main' &&
      github.repository == 'StarRocks/starrocks'
    env:
      PR_NUMBER: ${{ github.event.number }}
    steps:
      - name: commit_sha
        id: commit_sha
        run: |
          set -x
          commit_sha=`curl -L \
            -H "Accept: application/vnd.github+json" \
            -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
            -H "X-GitHub-Api-Version: 2022-11-28" \
            https://api.github.com/repos/${{ github.repository }}/pulls/${PR_NUMBER} 2>/dev/null \
            | jq .merge_commit_sha`
          commit_sha=$(echo ${commit_sha//\"})
          echo "commit_sha=${commit_sha}" >> $GITHUB_OUTPUT

      - name: update merged coverage
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          rm -rf ./ci-tool && cp -rf /var/lib/ci-tool ./ci-tool && cd ci-tool && git pull && source lib/init.sh
          ./bin/upload_cov_after_merge.sh --pr ${PR_NUMBER} --commit ${{ steps.commit_sha.outputs.commit_sha }}

      - name: Clean ENV
        if: always()
        run: |
          rm -rf ${{ github.workspace }}/*

  clean_ci_workflow:
    runs-on: ubuntu-latest
    if: >
      github.event.pull_request.merged != true
    env:
      PR_NUMBER: ${{ github.event.number }}
      REPO: ${{ github.repository }}
      BRANCH: ${{ github.base_ref }}
      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - name: cancel
        run: |
          if [[ "${BRANCH}" == "main" ]]; then
            yaml=ci-pipeline.yml
          else
            yaml=ci-pipeline-branch.yml
          fi
          
          gh run list --workflow ${yaml} -R ${REPO} -b ${GITHUB_HEAD_REF} --json databaseId -q '.[].databaseId' | xargs gh run cancel -R ${REPO} || true

  update_backport_merged_msg:
    runs-on: [ self-hosted, quick ]
    if: >
      github.base_ref != 'main' && github.event.pull_request.merged == true
    env:
      PR_NUMBER: ${{ github.event.number }}
    steps:
      - name: prepare merge label
        if: >
          !contains(github.event.pull_request.labels.*.name, 'sync') &&
          contains(github.event.pull_request.title, '(backport #')
        env:
          GH_TOKEN: ${{ secrets.PAT }}
        run: |
          LABEL="${GITHUB_BASE_REF##*-}-merged"
          gh label create "${LABEL}" -R ${GITHUB_REPOSITORY} -c 98C1D7 -f

      - name: add merge label
        if: >
          always() && !contains(github.event.pull_request.labels.*.name, 'sync') &&
          contains(github.event.pull_request.title, '(backport #')
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          LABEL="${GITHUB_BASE_REF##*-}-merged"
          ORI_PR=$(echo "${{ github.event.pull_request.title }}" | grep -oP '\(backport #\K\d+' | tail -n 1)
          gh pr edit ${ORI_PR} -R ${GITHUB_REPOSITORY} --add-label "${LABEL}"

      - name: prepare version label
        id: prepare_version_label
        if: always()
        env:
          GH_TOKEN: ${{ secrets.PAT }}
        run: |
          rm -rf ./ci-tool && cp -rf /var/lib/ci-tool ./ci-tool && cd ci-tool && git pull >/dev/null
          version=$(./scripts/get_next_release_tag.sh)
          version_label="version:${version}"
          echo "LABEL=${version_label}" >> $GITHUB_OUTPUT
          gh label create "${version_label}" -R ${GITHUB_REPOSITORY} -c 1d76db -f

      - name: add version label
        if: always()
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          VERSION_LABEL: ${{ steps.prepare_version_label.outputs.LABEL }}
        run: |
          gh pr edit ${PR_NUMBER} -R ${GITHUB_REPOSITORY} --add-label "${VERSION_LABEL}"
          
